package com.cw.DesignModel23.Ceational.BuilderPattern.builder5;

/**
 * 【分析】
 *
 * Main类并不知道Builder类，它只是调用了Direct 类的construct 方法这样，Director类就会开始工作(Main类对此一无所知)，并完成文档的编写
 * Director类知道Builder类，它调用Builder类的方法来编写文档，但它并不知道它所使用的类到底是 TextBuilder类、HTMLBuilder类还是其他 Builder类的子类，而且也没有必要知道，因为Director类只使用Builder类的方法
 * 不论是将 TextBuilder 的实例传递给 Director，还是将HTMLBuilder类的实例传递给 Director，它都可以正常工作，原因正是Director类不知道Builder类的具体的子类。正是因为不知道才能够替换，正是因为可以替换，组件才具有高价值。作为设计人员，我们必须时刻关注这种“可替换性”
 * ————————————————
 * 版权声明：本文为CSDN博主「Hello Dam」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
 * 原文链接：https://blog.csdn.net/laodanqiu/article/details/131872520
 */

/**
 * Builder模式测试
 */
public class Main {
    public static void main(String[] args) {
        String type = "plain";
        if (type.equals("plain")) {
            TextBuilder textbuilder = new TextBuilder();
            Director director = new Director(textbuilder);
            director.construct();
            String result = textbuilder.getResult();
            System.out.println(result);
        } else if (type.equals("html")) {
            HTMLBuilder htmlbuilder = new HTMLBuilder();
            Director director = new Director(htmlbuilder);
            director.construct();
            String filename = htmlbuilder.getResult();
            System.out.println(filename + "文件编写完成。");
        } else {
            usage();
            System.exit(0);
        }
    }

    public static void usage() {
        System.out.println("Usage: java Main plain      编写纯文本文档");
        System.out.println("Usage: java Main html       编写HTML文档");
    }
}

